﻿#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

// 二进制编码
Scalar encode_binary(int msg) {
    if (msg == 0) return Scalar(0, 0, 0);   // 黑色
    if (msg == 1) return Scalar(255, 255, 255); // 白色
    return Scalar(0, 0, 0); // 默认黑色
}
// 八进制编码
Scalar encode_octal(int msg) {
    switch (msg) {
    case 0: return Scalar(0, 0, 0);     // 黑色
    case 1: return Scalar(255, 255, 255); // 白色
    case 2: return Scalar(0, 0, 255);   // 红色
    case 3: return Scalar(255, 0, 0);   // 蓝色
    case 4: return Scalar(0, 255, 0);   // 绿色
    case 5: return Scalar(255, 0, 255); // 紫色
    case 6: return Scalar(0, 255, 255); // 黄色
    case 7: return Scalar(255, 255, 0); // 青色
    default: return Scalar(0, 0, 0);    // 默认黑色
    }
}
// 这个函数用于发送信息
void send(int msg, bool is_binary = true) {
    Scalar color = is_binary ? encode_binary(msg) : encode_octal(msg);
    Mat frame(480, 640, CV_8UC3, color); 
    namedWindow("Sender", WINDOW_NORMAL);
    setWindowProperty("Sender", WND_PROP_FULLSCREEN, WINDOW_FULLSCREEN);
    imshow("Sender", frame);
    waitKey(3000); 
}
int main() {
    cout << "输入模式 (0=二进制, 1=八进制): ";
    int mode;
    cin >> mode;
    cout << "输入消息 (二进制: 0-1, 八进制: 0-7): ";
    int msg;
    cin >> msg;

    if (mode == 0 && (msg < 0 || msg > 1)) {
        cout << "二进制模式下请输入 0 或 1" << endl;
        return -1;
    }
    if (mode == 1 && (msg < 0 || msg > 7)) {
        cout << "八进制模式下请输入 0-7" << endl;
        return -1;
    }

    send(msg, mode == 0);
    destroyAllWindows();
    return 0;
}